﻿// ------------------------------------------------------------------------
// 版权信息
// 版权归重庆虫儿飞科技有限公司所有。
// 所有权利保留。
// 官方网站：https://netokit.com
// 许可证信息
// Neto.Kit 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
// 
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
// 
// 其他重要信息
// Neto.Kit 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Neto.Kit 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
// 
// 更多信息
// 请访问 https://netokit.com 获取更多关于 Neto.Kit 项目的许可证和版权信息。
// ------------------------------------------------------------------------

#region

using Neto.Db.SqlSugar.Interfaces;
using System.Diagnostics;

#endregion

namespace Neto.Core;

/// <summary>
///     实体改变监听
/// </summary>
public class EntityChangedListener : ISqlSugarDataChangedListener
{
    public void OnChanged(ISqlSugarClient db, DataFilterModel dataFilterModel)
    {
        //if (dataFilterModel.OperationType == DataFilterType.InsertByObject)
        //{
        //}
        //else if (dataFilterModel.OperationType == DataFilterType.UpdateByObject)
        //{
        //}
        //else if (dataFilterModel.OperationType == DataFilterType.DeleteByObject)
        //{
        //}

        Task.Run(() =>
        {
            var sw = new Stopwatch();
            sw.Start();
            var logger = LogX.GetLogger($"EntityChangedListener\\{dataFilterModel.EntityName}");
            var strLog = new StringBuilder($"实体：{dataFilterModel.EntityName} 操作类型:{dataFilterModel.OperationType:G}");
            try
            {
                switch (dataFilterModel.EntityName)
                {
                    // case "SysDataConfig":
                    // case "SysMenu1":
                    // case "SysRole":
                    // case "SysRoleMenu":
                    //
                    //     #region
                    //
                    // {
                    //     //刷新缓存
                    //     //db.RefreshTableCacheByEntityName(entityName);
                    //     db.RemoveCacheByContainStr(dataFilterModel.EntityName);
                    //     break;
                    // }
                    //
                    // #endregion

                    // case "SysUser":
                    //
                    //     #region SysUser
                    //
                    // {
                    //     //是ID的情况我们才执行
                    //     if (dataFilterModel.EntityColumnInfo.PropertyInfo.Name.ToLower() == "id")
                    //         Scoped.Create((factory, scope) =>
                    //         {
                    //             var services = scope.ServiceProvider;
                    //             var _cacheservice = App.GetService<ISysCacheService>(services);
                    //
                    //             var Id = dataFilterModel.EntityColumnInfo.PropertyInfo.GetValue(dataFilterModel.EntityValue)
                    //                 .ToLong();
                    //           
                    //         });
                    // }
                    //     break;
                    //
                    // #endregion

                    case "SysLocalizationTranslation": //全球化本地化翻译

                        #region SysLocalizationTranslation

                    {
                        // //路由区域
                        // var area = dataFilterModel.EntityValue.GetType().GetProperty("Area")
                        //     ?.GetValue(dataFilterModel.EntityValue, null)?.ToString();
                        //
                        // //语种区域码
                        // var culture = dataFilterModel.EntityValue.GetType().GetProperty("Culture")
                        //     ?.GetValue(dataFilterModel.EntityValue, null)?.ToString();
                        //
                        // //清理翻译的缓存
                        // LX.ClearCache(area, culture);
                        // //加载数据             
                        // LX.LocalizationLoadData();
                    }
                        break;

                    #endregion

                    default:
                        break;
                }
            }
            catch (Exception e)
            {
                strLog.AppendLine($"异常信息：{e.Message}");
                strLog.AppendLine($"异常：{e.ToStringEx()}");

                sw.Stop();
                logger.Error(strLog + $"\r\n执行耗时：{sw.ElapsedMilliseconds}ms");
            }
            finally
            {
                if (sw.IsRunning) sw.Stop();

                strLog.AppendLine($"执行耗时：{sw.ElapsedMilliseconds}ms");
                logger.Debug(strLog.ToString());
            }
        });
    }
}